package ConexaoBackupBD;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MetodosVerificacaoBD {
    
    // Conexão com o Banco de dados
    ConexaoBD conBD = new ConexaoBD();   
    Statement BDMetodos;
    ResultSet rs;
    
    /** Método para capturar o valor do código de uma tabela
     @return int */
    public int autoIncremento(String tabela, String campo){ //Campo AutoIncremento no Banco   
        try
        {
            int codigo;
            Connection con = conBD.conectar();

            BDMetodos = con.createStatement();
            rs = BDMetodos.executeQuery("SELECT max("+campo+") from "+tabela+"");            
            rs.last();

            if(rs.getInt(1) == 0){           
                con.close();
                codigo = 1;
                return codigo;                
            }
            else
            {
                codigo = rs.getInt(1) + 1;  
                con.close();  
                return codigo;
            }            
        } 
        catch (SQLException ex) {
            System.out.println(ex.getMessage());        
        }
        return 0;
    }
    
    /** Verifica se o valor para um determinado campo na tabela é unico.
      * @return true = Valor unico.
      * <br> false = Valor já existe
      */
    public boolean unique (String tabela, String campo, String valor){ // Campos Unicos no Banco
        try
        {
            Connection con = conBD.conectar();
            BDMetodos = con.createStatement();
            rs = BDMetodos.executeQuery("SELECT count("+campo+") "
                    + " from "+tabela+" where "+campo+"= '"+valor+"' ");
            rs.last();

            if(rs.getInt(1) == 1){           
                con.close();
                return false; //Erro
            }
            else
            { 
                con.close();  
                return true; //Pode Inserir
            } 
        }    
        catch (SQLException ex) {
            System.out.println("Erro no Método Unique.");        
        }
        return false; 
    }
    
    /** Método para verificar chaves compostas iguais (duas). 
     * @return false = Erro, <br> true = OK
     */
    public boolean verificarChaveComposta(String tabela, String campo1, String valor1, String campo2, String valor2){     
        try
        {
            Connection con = conBD.conectar();
            BDMetodos = con.createStatement();
            rs = BDMetodos.executeQuery("SELECT count("+campo1+") from "+tabela+" "
                    + " where "+campo1+"= '"+valor1+"' and "
                    + " "+campo2+" = '"+valor2+"' ");
            rs.last();

            if(rs.getInt(1) == 1){           
                con.close();
                return false; //Erro
            }
            else
            { 
                con.close();  
                return true; //Pode Inserir
            } 

        }
        catch (SQLException ex) {
            System.out.println("Erro no método chave composta.");        
        }

        return false;
    }

     /** Método para verificar chaves compostas iguais (três). 
     * @return false = Erro, <br> true = OK
     */
    public boolean verificarChaveComposta(String tabela, String campo1, String valor1, String campo2, String valor2, String campo3, String valor3){     
        try
        {
            Connection con = conBD.conectar();
            BDMetodos = con.createStatement();
            rs = BDMetodos.executeQuery("SELECT count("+campo1+") from "+tabela+" "
                    + " where "+campo1+"= '"+valor1+"' and "
                    + " "+campo2+" = '"+valor2+"' and"
                    + " "+campo3+" = '"+valor3+"' ");
            rs.last();

            if(rs.getInt(1) == 1){           
                con.close();
                return false; //Erro
            }
            else
            { 
                con.close();  
                return true; //Pode Inserir
            } 

        }
        catch (SQLException ex) {
            System.out.println("Erro no método chave composta.");        
        }

        return false;
    }
    
    /** Método para converter data do padrão EUA para o BRA. */
    public String convDataBra(String dataEua){
        SimpleDateFormat eua = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat bra = new SimpleDateFormat("dd/MM/yyyy");
        Date date;      
        try{
            date = eua.parse(dataEua);
            return (bra.format(date));           
        }
        catch(ParseException e){
            return e.getMessage();            
        }
    }  
    
    /** Método para formatar data no padrão EUA (yyyy-MM-dd). */
    public String formatarDataEua(Date data){
        SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
        return formato.format(data);
    }
    
    /** Método para converter String em data no padrão (dd/MM/yyyy). */
    public Date stringToDate(String data){
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        try {
            return formato.parse(data);
        } catch (ParseException ex) {
            Logger.getLogger(MetodosVerificacaoBD.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    
}
